package com.dailygreetings.dailygreetings.utils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

/**
 * @BelongsProject: daily-greetings
 * @BelongsPackage: com.dailygreetings.dailygreetings.utils
 * @Author: shanzhengfei
 * @CreateTime: 2024-11-21  17:29
 * @Description: 请求工具类
 * @Version: 1.0
 */

@Component
public class HttpUtils {

    private final RestTemplate restTemplate;

    public HttpUtils(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    /**
     * 发送 GET 请求
     *
     * @param url 请求的 URL
     * @param responseType 响应类型
     * @param <T> 响应类型泛型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> get(String url, Class<T> responseType) {
        return restTemplate.exchange(url, HttpMethod.GET, null, responseType);
    }

    /**
     * 发送 GET 请求，并携带请求头
     *
     * @param url 请求的 URL
     * @param headers 请求头
     * @param responseType 响应类型
     * @param <T> 响应类型泛型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> get(String url, HttpHeaders headers, Class<T> responseType) {
        HttpEntity<String> entity = new HttpEntity<>(headers);
        return restTemplate.exchange(url, HttpMethod.GET, entity, responseType);
    }

    /**
     * 发送 POST 请求
     *
     * @param url 请求的 URL
     * @param request 请求体
     * @param responseType 响应类型
     * @param <T> 响应类型泛型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> post(String url, Object request, Class<T> responseType) {
        return restTemplate.postForEntity(url, request, responseType);
    }

    /**
     * 发送 POST 请求，并携带请求头
     *
     * @param url 请求的 URL
     * @param request 请求体
     * @param headers 请求头
     * @param responseType 响应类型
     * @param <T> 响应类型泛型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> post(String url, Object request, HttpHeaders headers, Class<T> responseType) {
        HttpEntity<Object> entity = new HttpEntity<>(request, headers);
        return restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
    }
}
